﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 泛型约束
{
    public class GenericClass
    {
        public GenericClass()
        { }

        //类型约束
        public static void GenericMethod<T>(T par) where T : BaseModle
        {
            Console.WriteLine(par.Id);
            Console.WriteLine(par.CreateTime);
        }

        //接口约束
        //类型参数必须实现这个接口，才能够传入进来
        //可以把参数当初接口实现
        public static void GenericMethod2<T>(T par) where T : BaseInterface
        {
            par.CW1();
            var obj = par.Id;
        }

        //无参构造函数约束
        //传入的参数必须包含无参构造函数
        //可以直接new T
        public static void GenericMethod3<T>(T par) where T : new()
        {
        }

        //结构类型约束
        //传入的参数必须是结构体类型
        public static void GenericMethod4<T>(T par) where T : struct
        {
        }

        //引用类型约束
        //传入的参数必须是引用体类型
        public static void GenericMethod5<T>(T par) where T : class
        {
        }

        //枚举类型约束
        //传入的参数必须是枚举体类型
        public static void GenericMethod6<T>(T par) where T : Enum
        {
        }


        public enum enum1
        {
            A = 1,
            B = 2,
            C = 3,
        }
    }
}